.TITLE TTOIS .IDENT /05.04/ ; ; Copyright (c) 1995-1999 by Mentec, Inc., U.S.A. ; All rights reserved ; ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED ; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ; ; ; 23-JAN-78 PETER WANNHEDEN ; ; PREVIOUSLY MODIFIED BY: ; ; P. WANNHEDEN ; D. R. DONCHIN ; T. LEKAS ; ; MODIFICATIONS: ; ; D. R. DONCHIN 05-JUN-83 05.01 ; DD173 -- FIX MINOR PROBLEMS IN DHV11 CODE ; ; D. R. DONCHIN 14-SEP-83 05.02 ; DD179 -- ADD HOSTSYNC SUPPORT ; ; S. C. ADAMS 23-APR-84 05.03 ; SA170 -- CHANGE S4.XOF,XON,HPC TO S5. XOF,XON,HPC ; CHANGE S1.CTS TO S2.CTS. AND CHANGE S1.OBF ; ; S. C. ADAMS 21-MAY-84 05.04 ; SA195 -- ELIMINATE REDUNDANT BIT TEST .PSECT MAP5 ; ; PROFESSIONAL 300 SERIES PRINTER PORT DEFINITIONS ; PDBUF = 173400 ;RECEIVER DATA BUFFER REGISTER PSTS = 173402 ;STATUS REGISTER PMODE = 173404 ;MODE REGISTER PCMND = 173406 ;COMMAND REGISTER ; ; PROFESSIONAL 300 SERIES INTERRUPT CONTROLLER DEFINITIONS ; ICCSR = 173202 ;INTERRUPT CONTROLLER 0 CSR REGISTER PRINTR = 5 ;PRINTER RECEIVER INTERRUPT REQUEST LEVEL PXINTR = 6 ;PRINTER TRANSMITTER INTERRUPT REQUEST LEVEL CLSIMR = 50 ;CLEAR SINGLE IMR BIT COMMAND STSIRR = 130 ;SET SINGLE IRR BIT COMMAND STSIMR = 70 ;SET SINGLE IMR BIT COMMAND ; ; ;+ ; COMMON OUTPUT INTERRUPT SERVICE ROUTINE. ; USED BY FOLLOWING CONTROLLER TYPES: DJ, DL, DZ. ; ; INPUT: ; R2 BITMASK FOR TRANSMIT ENABLE ; R3 CSR ADDRESS ; R5 POINTER TO U.TSTA ; ; OUTPUT: ; NEXT CHARACTER IS OUTPUT, IF THERE IS ONE. ; IF NECESSARY, A SWITCH IS MADE TO THE NEXT OUTPUT BUFFER ; (ONLY IF DOING BUFFERED OUTPUT). ; IF NO MORE CHARACTERS TO OUTPUT, ODONE IS CALLED TO ; PERFORM OUTPUT-DONE PROCESSING. ; ; REGISTERS ALTERED: R2,R3,R4 ;- ; ; .MCALL HWDDF$,UCBDF$ ; HWDDF$ ;DEFINE HARDWARE RELATED SYMBOLS UCBDF$ ;DEFINE UCB SYMBOLS .ENABL LSB .IF DF D$$J11!D$$L11!D$$Z11 ; ; OUTISR:: .IF DF R$$CON BITB #US.OFL,U.ST2-U.TSTA(R5) ;;;OFFLINE? BNE 110$ ;;;Y - IGNORE .ENDC ; ; DETERMINE IF AN XOFF OR XON SHOULD BE OUTPUT. ; BIT #S5.HPC,U.TST5-U.TSTA(R5) ;;;ANY HIGH PRIORITY OUTPUT REQUEST PENDING? BEQ 7$ ;;;N - JUMP BIT #S5.XOF,U.TST5-U.TSTA(R5) ;;;OUTPUT AN XOFF? BEQ 5$ ;;;N - JUMP ; ; OUTPUT AN XOFF. ; BIC #S5.XOF,U.TST5-U.TSTA(R5) ;;;Y - RESET INDICATION MOVB ASXOFF,6(R3) ;;;OUTPUT AN XOFF RETURN ;;;CONTINUE NORMAL OUTPUT AT NEXT INTERRUPT ; ; THE HIGH PRIORITY OUTPUT IS NOT FOR XOFF, MUST BE THEN FOR XON, SO OUTPUT IT. ; 5$: BIC #S5.XON,U.TST5-U.TSTA(R5) ;;;RESET XON INDICATION MOVB ASXON,6(R3) ;;;OUTPUT AN XON RETURN 7$: BITB #US.OIU,U.STS-U.TSTA(R5) ;;;OUTPUT INTERRUPT UNEXPECTED? BNE 110$ ;;;Y - IGNORE ; ; HANDLE XOFF FROM TERMINAL. ; ASSUME S2.CTS,100000 TST 2(R5) ;;;OUTPUT STOPPED BY CTRL-S? BMI 110$ ;;;Y - IGNORE ; ; GET NEXT CHARACTER TO OUTPUT. ; MOV R2,-(SP) ;;;SAVE R2 .IF DF T$$SPL MOV U.TAPR-U.TSTA(R5),@#KDSAR5 ;;;MAP UCBX MOV #120000,R4 ;;;SET VIRTUAL ADDRESS OF UCBX .IFF ;T$$SPL MOV U.TUX-U.TSTA(R5),R4 ;;;GET UCB EXTENSION .ENDC ;T$$SPL ADD #U.TOC,R4 ;;;POINT TO U.TOC 10$: DEC @R4 ;;;DECREMENT BYTE COUNT (U.TOC) BPL 20$ ;;;MORE TO DO - JUMP CLR @R4 ;;;THIS BUFFER EXHAUSTED - CLEAR U.TOC TST -(R4) ;;;POINT TO U.TOP+2 CALL NXTOB ;;;GET NEXT OUTPUT BUFFER IF THERE IS ONE BNE 10$ ;;;DO IT ALL OVER AGAIN WITH NEW BUFFER BR 100$ ;;;ALL DONE - JUMP 20$: TST (SP)+ ;;;CLEAN STACK .IF DF T$$ACD BIT #S2.OBF,2(R5) ;;;BUFFERED OUTPUT? BNE 90$ ;;;Y - JUMP .IF DF D$$H11!D$$V11 CALL MOUT ;;;GENERATE THE PROPER OUTPUT FOR THE NEXT CHAR. MOVB R2,6(R3) ;;;OUTPUT THE RETURNED CHARACTER RETURN ;;; .ENDC ;D$$H11!D$$V11 .ENDC ;T$$ACD .ENDC ;D$$J11!D$$L11!D$$Z11 .IF DF T$$ACD ; ; WE ARE HERE TO PERFORM AN ECHO BY FIRST EXPANDING THE CHARACTER ; AND THEN OUTPUTTING ITS GENERATED ECHO (CALLED MULTI-ECHO). ; MOUT:: MOV R3,-(SP) ;;;SAVE CSR ADDRESS MOV U.TFOB-U.TOC(R4),R2 ;;;GET MULTI-ECHO BUFFER ADDRESS BNE 60$ ;;;IT POINTS TO SOME CHARACTERS - JUMP MOV -(R4),R2 ;;;GET ADDRESS OF NEXT CHARACTER TO EXPAND INC @R4 ;;;UPDATE POINTER MOV -2(R4),@#KISAR6 ;;;MAP THE BUFFER MOVB (R2),R2 ;;;GET THE CHARACTER ITSELF MOV $DALED,@#KISAR6 ;;;REMAP THE DRIVER CALL EXPCHR ;;;EXPAND CHARACTER TO GENERATE PROPER OUTPUT BNE 30$ ;;;EXPANSION IS A STRING - JUMP MOV (SP)+,R3 ;;;GET CSR ADDRESS .IF NDF D$$H11&D$$V11 MOVB R2,6(R3) ;;;OUTPUT CHARACTER AS ITSELF .IFTF ;NDF D$$H11&D$$V11 RETURN ;;;WAIT FOR NEXT INTERRUPT 30$: BCS 40$ ;;;GENERATE A MULTI-ECHO SEQUENCE - SAVE CHAR? CMP (R4)+,(R4)+ ;;;N - POINT TO MULTI-ECHO BUFFER POINTER BR 50$ ;;;SET UP MULTI-ECHO BUFFER POINTER AND LENGTH 40$: DEC (R4)+ ;;;NEED CHAR. AGAIN - BACK UP POINTER (U.TOP+2) INC (R4)+ ;;;AND UPDATE COUNTER (U.TOC) ASSUME ,U.TTOC 50$: MOV R2,(R4)+ ;;;INSERT MULTI-ECHO SEQUENCE LENGTH (U.TTOC) MOV R3,@R4 ;;;INSERT MULTI-ECHO SEQUENCE ADDRESS (U.TFOB) MOV R3,R2 ;;;PUT ADDRESS WHERE NEEDED BR 70$ ;;;OUTPUT FIRST CHARACTER FROM MULTI-ECHO BUFFER ASSUME ,U.TFOB 60$: INC (R4)+ ;;;DON'T CHANGE COUNT IF DOING MULTI-ECHO TST (R4)+ ;;;POINT TO MULTI-ECHO BUFFER ADDRESS (U.TFOB) 70$: MOV (SP)+,R3 ;;;RESTORE CSR ADDRESS .IFF ;NDF D$$H11&D$$V11 MOVB (R2),R2 ;;;GET CHARACTER FROM MULTI-ECHO BUFFER .IFT ;NDF D$$H11&D$$V11 MOVB (R2),6(R3) ;;;OUTPUT CHARACTER FROM MULTI-ECHO BUFFER .ENDC ;NDF D$$H11&D$$V11 INC @R4 ;;;POINT TO NEXT ONE DEC -(R4) ;;;SHOW ONE LESS CHARACTER IN MULTI-ECHO BUFFER BNE 80$ ;;;MORE TO DO - JUMP CLR 2(R4) ;;;ALL DONE - CLEAR MULTI-ECHO BUFFER POINTER 80$: RETURN ;;; .ENDC ;T$$ACD .IF DF D$$J11!D$$L11!D$$Z11 90$: ;;;REFERENCE LABEL .IF DF R$$PRO ASSUME H2.BRG,100000 TST $HFMSK+2 ;;;IS THIS A PRO BRIDGE SYSTEM? BMI 95$ ;;;IF NE YES MOVB @-(R4),PDBUF ;;;OUTPUT CHARACTER BR 97$ ;;;AND CONTINUE .IFTF ;R$$PRO 95$: MOVB @-(R4),6(R3) ;;;OUTPUT CHARACTER .IFT ;R$$PRO 97$: ;;;REFERENCE LABEL .ENDC ;R$$PRO INC @R4 ;;;UPDATE POINTER RETURN ;;;RETURN ; 100$: MOV @SP,R2 ;;;RESTORE R2 MOV #ODONE,@SP ;;;DO OUTPUT DONE PROCESSING BEFORE ;;;INTERRUPT IS DISMISSED 110$: BIC R2,4(R3) ;;;DISABLE TRANSMISSION ON THIS LINE .IF DF R$$PRO ; ; FOR THE PROFESSIONAL 300 SERIES MACHINES BOTH METHODS OF EFFECTING ; THE INTERRUPT ENABLE BITS ARE LEFT IN PLACE SO THAT THE SYSTEM WILL ; WORK ON BOTH THE REAL HARDWARE AND THE BRIDGE SYSTEM. THE BRIDGE ; SYSTEM CONSISTS OF AN 11/23-PLUS SYSTEM WITH AN INTERFACE ON IT TO ; THE CTI BUS. ; ; ON THE REAL HARDWARE THE BIC R2... IS IGNORED. ON THE BRIDGE ; SYSTEM THE FOLLOWING INSTRUCTION IS IGNORED BECAUSE IT WRITES ; INTO THE BOOT ROM ; MOV #STSIMR!PXINTR,ICCSR ;;;DISABLE TRANSMISSION ON THIS LINE ;;;FOR THE PRINTER PORT .ENDC ;R$$PRO RETURN ;;; .ENDC ;D$$J11!D$$L11!D$$Z11 .DSABL LSB ; ; .END